package com.gs.disk.service.common;

import cn.hutool.core.util.ObjectUtil;
import com.gs.entity.OssFile;
import com.gs.common.util.DateTimeUtil;
import com.gs.common.util.MinIOUtil;
import io.minio.messages.Item;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;

/**
 * @title: 孙杨申
 * @date 2022/6/5 14:01
 */

@Service
public class MinioService {

    @Resource
    private MinIOUtil minIOUtil;

    /**
     * 上传文件
     * @param file 文件
     * @param bucketName bucketName
     * @param path 文件上传路径
     * @param fileName 文件名
     */
    public void upload(MultipartFile file, String bucketName, String path, String fileName) {

        if(ObjectUtil.isEmpty(path)) {
            path = DateTimeUtil.currentTimeUTf8();
        }

        // 上传文件的path必须以“/”结尾
        if(path != null && !path.endsWith("/")) {
            path += "/";
        }
        minIOUtil.upload(file, bucketName, path, fileName);
    }

    /**
     * 下载文件
     * @param bucketName bucketName
     * @param url 文件路径
     * @param response 响应头
     */
    public void download(String bucketName, String url, HttpServletResponse response) {
        minIOUtil.download(bucketName, url, response);
    }

    /**
     * 删除文件
     * @param bucketName bucketName
     * @param fileName 文件名
     */
    public void delete(String bucketName, String fileName) {
        minIOUtil.removeObject(bucketName, fileName);
    }

    /**
     * 文件列表
     * @param bucketName bucketName
     * @param path 文件路径
     * @return
     */
    public List<OssFile> listAllFiles(String bucketName, String path) {
        List<Item> items = minIOUtil.listObjects(bucketName, path);
        List<OssFile> ossFiles = MinIOUtil.convertOssFileList(items);
        return ossFiles;
    }

    /**
     * 获取minio的下载路径
     * @param path 文件路径
     * @return
     */
    public String getDownloadURL(String bucketName, String path) {
        String downloadURL = minIOUtil.getDownloadURL(bucketName, path);
        return downloadURL;
    }

    public InputStream getObject(String path) throws Exception {
        return  minIOUtil.getObject(path);
    }


}
